package uy.com.csi.gestpro.model.ejbbean;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import uy.com.csi.gestpro.model.ejbremote.PersonalEjbRemote;
import uy.com.csi.gestpro.model.mantenimiento.GpPrsnal;
import uy.com.csi.gestpro.model.seguridad.GpPryctoUsrio;
import uy.com.csi.gestpro.model.view.GpVwActvdadPrsnal;
import uy.com.csi.gestpro.model.view.GpVwPrsnalPrycto;

@Stateless
public class PersonalEjb implements PersonalEjbRemote {
	@PersistenceContext(name = "pu_gestpro")
	EntityManager em;

	public PersonalEjb() {
	}

	@Override
	public GpPrsnal getPersonalByUserId(Integer id) {
		GpPrsnal personal = null;
		try {
			String consulta = "select p from GpPrsnal p where p.gpUsrio.id=:id";
			Query q = em.createQuery(consulta);
			q.setParameter("id", id);
			personal = (GpPrsnal) q.getSingleResult();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return personal;
	}
	
	@Override
	public GpPryctoUsrio getNivelAcceso(Integer idProyecto, Integer idUsuario){
		GpPryctoUsrio nivelAcceso=null;
		String consulta = "select p from GpPryctoUsrio p where p.gpPrycto.id=:idp and p.gpUsrio.id=:idu";
		try{
			Query q = em.createQuery(consulta);
			q.setParameter("idp", idProyecto);
			q.setParameter("idu", idUsuario);
			nivelAcceso = (GpPryctoUsrio)q.getSingleResult();
		}catch(Exception e){
			e.printStackTrace();
		}
		return nivelAcceso;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<GpVwPrsnalPrycto> getPersonalActvdadByPyInfrme(Integer idProyecto, Integer idInfrme) {
		List<GpVwPrsnalPrycto> gpVwPrsnalPryctos = null;
		try {
			String consulta = "select pp from GpVwPrsnalPrycto pp where pp.idPrycto=:idPrycto order by pp.oprarioNmro asc";
			Query q = em.createQuery(consulta);
			q.setParameter("idPrycto", idProyecto);
			gpVwPrsnalPryctos = (List<GpVwPrsnalPrycto>) q.getResultList();

			if (gpVwPrsnalPryctos != null && !gpVwPrsnalPryctos.isEmpty()) {
				for (int i = 0; i < gpVwPrsnalPryctos.size(); i++) {
					Integer idPrsonal = gpVwPrsnalPryctos.get(i).getId();
					consulta = "select ap from GpVwActvdadPrsnal ap where ap.idPrsnalPrycto=:idPrsnalPrycto and ap.idInfrmeDrio=:idInfrmeDrio";
					Query q2 = em.createQuery(consulta);
					q2.setParameter("idPrsnalPrycto", idPrsonal);
					q2.setParameter("idInfrmeDrio", idInfrme);
					List<GpVwActvdadPrsnal> actvdadPrsnals = (List<GpVwActvdadPrsnal>) q2.getResultList();
					gpVwPrsnalPryctos.get(i).setGpActvdadPrsnals(actvdadPrsnals == null ? new ArrayList<GpVwActvdadPrsnal>() : actvdadPrsnals);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return gpVwPrsnalPryctos;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<GpVwPrsnalPrycto> getPersonalActvdad(Integer idProyecto) {
		List<GpVwPrsnalPrycto> gpVwPrsnalPryctos = null;
		try {
			String consulta = "select pp from GpVwPrsnalPrycto pp where pp.idPrycto=:idPrycto order by pp.oprarioNmro asc";
			Query q = em.createQuery(consulta);
			q.setParameter("idPrycto", idProyecto);
			gpVwPrsnalPryctos = (List<GpVwPrsnalPrycto>) q.getResultList();

			if (gpVwPrsnalPryctos != null && !gpVwPrsnalPryctos.isEmpty()) {
				for (int i = 0; i < gpVwPrsnalPryctos.size(); i++) {
					gpVwPrsnalPryctos.get(i).setGpActvdadPrsnals(new ArrayList<GpVwActvdadPrsnal>());
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return gpVwPrsnalPryctos;
	}

	@Override
	public boolean cambiarContrasena(Integer idUsuario, String nuevaContrasena) {
		String consulta = "update GpUsrio u set u.clve=:clve where u.id=:id";
		try {
			Query q = em.createQuery(consulta);
			q.setParameter("clve", nuevaContrasena);
			q.setParameter("id", idUsuario);
			q.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return true;
	}
}
